package com.cars.satoken.controller.demo.session;

import cn.dev33.satoken.session.SaSessionCustomUtil;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * Session 控制器
 *
 * @author: caoqianfan
 * @date: 2023/9/27 16:35
 */
@RestController
@RequestMapping("/session")
public class SessionController {
    /**
     * 获取指定账号 <font color="yellow">id</font> 的 <font color="yellow">Account-Session</font> (必须是登录后才能调用)<br>
     * <font color="yellow">tokenValue</font> 为空时获取当前 <font color="yellow">Token</font> 的
     *
     * @param loginId 账号id
     * @return {@code SaResult}
     */
    @GetMapping("/getAccountSession")
    public SaResult getAccountSession(@RequestParam(required = false) Integer loginId) {
        if (loginId == null) {
            return SaResult.ok(StpUtil.getSession().toString());
        }
        return SaResult.ok(StpUtil.getSessionByLoginId(loginId).toString());
    }

    /**
     * 获取指定 <font color="yellow">Token</font> 的 <font color="yellow">Token-Session</font> 对象<br>
     * <font color="yellow">tokenValue</font> 为空时获取当前 <font color="yellow">Token</font> 的
     *
     * @param tokenValue token值
     * @return {@code SaResult}
     */
    @GetMapping("/getTokenSession")
    public SaResult getTokenSession(@RequestParam(required = false) String tokenValue) {
        if (tokenValue.isBlank()) {
            return SaResult.ok(StpUtil.getSession().toString());
        }
        return SaResult.ok(StpUtil.getTokenSessionByToken(tokenValue).toString());
    }

    /**
     * 获取指定 <font color="yellow">key</font> 的 <font color="yellow">Session</font>
     *
     * @param sessionId key
     * @return {@code SaResult}
     */
    @GetMapping("/getCustomSession")
    public SaResult getCustomSession(@RequestParam String sessionId) {
        if (SaSessionCustomUtil.isExists(sessionId)) {
            return SaResult.ok(SaSessionCustomUtil.getSessionById(sessionId).toString());
        }
        return SaResult.error("不存在 key 为 " + sessionId + " 的 Session!");
    }

    /**
     * 删除指定 <font color="yellow">key</font> 的 <font color="yellow">Session</font>
     *
     * @param sessionId key
     * @return {@code SaResult}
     */
    @GetMapping("/deleteSessionById")
    public SaResult deleteSessionById(@RequestParam String sessionId) {
        if (SaSessionCustomUtil.isExists(sessionId)) {
            SaSessionCustomUtil.deleteSessionById(sessionId);
            return SaResult.ok();
        }
        return SaResult.error("不存在 key 为 " + sessionId + " 的 Session!");
    }
}